実装 sklearn.model_selection.train_test_split
https://github.com/scikit-learn/scikit-learn/blob/1.1.2/sklearn/model_selection/_split.py#L2349
cv = CVClass(test_size=n_test, train_size=n_train, random_state=random_state)
https://github.com/scikit-learn/scikit-learn/blob/1.1.2/sklearn/model_selection/_split.py#L2467
Sequenceの添字をtrainとtestに分ける
CVClassは
stratifyがデフォルト値のNoneのときShuffleSplit
stratifyが指定された時StratifiedShuffleSplit
添字を分ける
train, test = next(cv.split(X=arrays[0], y=stratify))
multilabelでstratifyは指定できない?
ValueError: The least populated class in y has only 1 member, which is too few. The minimum number of groups for any class cannot be less than 2.
sklearn.model_selection.StratifiedShuffleSplitの_iter_indicesメソッドで送出
np.min(class_counts) < 2のときのエラーメッセージ
マルチラベルのとき、yは文字列に変換されている
1サンプルにしか該当しないクラスがあったので例外が送出された
Multilabel Text Classification Done Right Using Scikit-learn and Stacked Generalizationでstratify引数は指定できている
データ数が多かったため、おそらく1サンプルにしか該当しないクラスはなかった
make_multilabel_classification(n_samples=1000, random_state=1)ではうまくいく
make_multilabel_classification(random_state=1)(n_samplesはデフォルトの100)では例外送出